package aqs;

import java.util.concurrent.locks.ReentrantLock;

/**
 * @author <a href='https://gitee.com/hzf2281'>codefish</a>
 * @version 1.0.0
 * @since 2022/09/03 上午 11:10
 */
public class AqsDemo {

    public static void main(String[] args) {

        //公平锁和非公平锁实现的区别
        //1. 非公平锁会先尝试cas更新AQS的state，失败则再进入acquire()
        //2. 进行tryAcquire()时公平锁会先判断AQS队列中是否存在其它正在等待的线程
        ReentrantLock lock = new ReentrantLock();

        // 1. 尝试获取锁
        // 2. 获取失败则添加节点到AQS的队列中
        //3. 设置前驱节点的状态未SIGNAL
        //4. 进入阻塞状态，等待被唤醒
        lock.lock();
        try{

        }finally {
            //1. 释放资源
            //2. 从AQS队列中移除
            //3. 唤醒后继节点的线程
            lock.unlock();
        }
    }
}
